home *** CD-ROM | disk | FTP | other *** search
/ Apple WWDC 1996 / WWDC96_1996 (CD).toast / Technology Materials / QuickTime VR / Windows / Interfaces / QD3DExtension.h < prev    next >
Encoding:
C/C++ Source or Header  |  1996-05-03  |  9.9 KB  |  331 lines  |  [TEXT/MPS ]

  1. /******************************************************************************
  2.  **                                                                             **
  3.  **     Module:        QD3DExtension.h                                             **
  4.  **                                                                          **
  5.  **                                                                          **
  6.  **     Purpose:     QuickDraw 3D Plug-in Architecture                         **
  7.  **                                                                          **
  8.  **                                                                          **
  9.  **                                                                          **
  10.  **     Copyright (C) 1992-1996 Apple Computer, Inc.  All rights reserved.     **
  11.  **                                                                          **
  12.  **                                                                          **
  13.  *****************************************************************************/
  14. #ifndef QD3DExtension_h
  15. #define QD3DExtension_h
  16.  
  17. #if PRAGMA_ONCE
  18.     #pragma once
  19. #endif
  20.  
  21. #include "QD3DErrors.h"
  22.  
  23. #if defined(THINK_C) || defined(__SC__)
  24.     #pragma options(!pack_enums, !align_arrays)
  25.     #pragma SC options align=power
  26. #elif defined(__MWERKS__)
  27.     #pragma enumsalwaysint on
  28.     #pragma align_array_members off
  29.     #pragma options align=native
  30. #elif defined(__PPCC__)
  31.     #pragma options align=power
  32. #elif defined(__xlc) || defined(__xlC) || defined(__xlC__) || defined(__XLC121__)
  33.     #pragma options enum=int
  34. #endif
  35.  
  36. #ifdef __cplusplus
  37. extern "C" {
  38. #endif  /* __cplusplus  */
  39.  
  40. /******************************************************************************
  41.  **                                                                             **
  42.  **                                Constants                                      **
  43.  **                                                                             **
  44.  *****************************************************************************/
  45.  
  46. #if defined(OS_MACINTOSH) && OS_MACINTOSH
  47.  
  48. #define kQ3ExtensionMacCreatorType        Q3_OBJECT_TYPE('Q','3','X','T')
  49. #define kQ3ExtensionMacFileType            Q3_OBJECT_TYPE('s','h','l','b')
  50.  
  51. #endif /* OS_MACINTOSH */
  52.  
  53. /******************************************************************************
  54.  **                                                                             **
  55.  **                                    Types                                      **
  56.  **                                                                             **
  57.  *****************************************************************************/
  58. #if defined(ESCHER_VER_15) && ESCHER_VER_15
  59. typedef struct TQ3ExtensionPrivate    *TQ3Extension;
  60. #endif /* ESCHER_VER_15 */
  61.  
  62. /******************************************************************************
  63.  **                                                                             **
  64.  **                                    Macros                                      **
  65.  **                                                                             **
  66.  *****************************************************************************/
  67.  
  68. #define Q3ObjectClassVersion(major, minor)        \
  69.     (unsigned long) (((major) << 16) | (minor))
  70.  
  71. /******************************************************************************
  72.  **                                                                             **
  73.  **                                Object Method types                              **
  74.  **                                                                             **
  75.  *****************************************************************************/
  76.  
  77. #define kQ3MethodTypeObjectClassVersion            Q3_METHOD_TYPE('v','r','s','n')
  78. typedef unsigned long    TQ3ObjectClassVersion;
  79.  
  80. #define kQ3MethodTypeObjectClassRegister        Q3_METHOD_TYPE('r','g','s','t')
  81. typedef TQ3Status (*TQ3ObjectClassRegisterMethod)(
  82.     TQ3ObjectClass        objectClass,
  83.     void                *classPrivate);
  84.  
  85. #define kQ3MethodTypeObjectClassReplace            Q3_METHOD_TYPE('r','g','r','p')
  86. typedef void (*TQ3ObjectClassReplaceMethod)(
  87.     TQ3ObjectClass        oldObjectClass,
  88.     void                *oldClassPrivate,
  89.     TQ3ObjectClass        newObjectClass,
  90.     void                *newClassPrivate);
  91.  
  92. #define kQ3MethodTypeObjectClassUnregister        Q3_METHOD_TYPE('u','n','r','g')
  93. typedef void (*TQ3ObjectClassUnregisterMethod)(
  94.     TQ3ObjectClass        objectClass,
  95.     void                *classPrivate);
  96.     
  97. #define kQ3MethodTypeObjectNew                    Q3_METHOD_TYPE('n','e','w','o')
  98. typedef TQ3Status (*TQ3ObjectNewMethod)(
  99.     TQ3Object            object,
  100.     void                *privateData,        
  101.     void                *parameters);        
  102.  
  103. #define kQ3MethodTypeObjectDelete                Q3_METHOD_TYPE('d','l','t','e')
  104. typedef void (*TQ3ObjectDeleteMethod)(
  105.     TQ3Object            object,
  106.     void                *privateData);
  107.     
  108. #define kQ3MethodTypeObjectPeek                    Q3_METHOD_TYPE('p','e','e','k')
  109. typedef void *(*TQ3ObjectPeekMethod)(
  110.     TQ3Object            object);
  111.  
  112. #define kQ3MethodTypeObjectCopy                    Q3_METHOD_TYPE('c','p','y','o')
  113. typedef TQ3Status (*TQ3ObjectCopyMethod)(
  114.     TQ3Object            fromObject,
  115.     const void            *fromPrivateData,
  116.     TQ3Object            toObject,
  117.     const void            *toPrivateData);
  118.  
  119. /* TODO: Move these to QD3DIO.h */
  120. #define kQ3MethodTypeObjectRead                    Q3_METHOD_TYPE('r','e','a','d')
  121. typedef TQ3Object (*TQ3ObjectReadMethod)(
  122.     TQ3FileObject        file);
  123.  
  124. typedef TQ3Status (*TQ3ObjectTraverseDataMethod)(
  125.     TQ3Object            object,
  126.     void                *data,
  127.     TQ3ViewObject        view);
  128.  
  129. #define kQ3MethodTypeObjectAttach                Q3_METHOD_TYPE('a','t','t','c')
  130. typedef TQ3Status (*TQ3ObjectAttachMethod)(
  131.     TQ3Object            childObject,
  132.     TQ3Object            parentObject);
  133.  
  134. /******************************************************************************
  135.  **                                                                             **
  136.  **                            Object Hierarchy Registration                      **
  137.  **                                                                             **
  138.  *****************************************************************************/
  139.  
  140. /*
  141.     Q3ObjectHierarchy_RegisterClass
  142.     
  143.     Register an object class in the QuickDraw 3D hierarchy.
  144.     
  145.     parentType            - an existing type in the hierarchy, or 0 to subclass
  146.                             TQ3Object
  147.     objectType            - the new object class type, used in the binary metafile
  148.     objectName            - the new object name, used in the text metafile
  149.     metaHandler            - a TQ3MetaHandler (may be NULL for some classes) which 
  150.                             returns non-virtual methods
  151.     virtualMetaHandler    - a TQ3MetaHandler (may be NULL as well) which returns
  152.                             virtual methods a child would inherit
  153.     methodsSize            - the size of the class data needed (see 
  154.                             GetClassPrivate calls below)
  155.     instanceSize        - the size of the object instance data needed (see 
  156.                             GetPrivate calls below)
  157.  */
  158. TQ3ObjectClass Q3ObjectHierarchy_RegisterClass(
  159.     TQ3ObjectType            parentType,
  160.     TQ3ObjectType            objectType,
  161.     char                    *objectName,
  162.     TQ3MetaHandler            metaHandler,
  163.     TQ3MetaHandler            virtualMetaHandler,
  164.     unsigned long            methodsSize,
  165.     unsigned long            instanceSize);
  166.  
  167. /*
  168.     Q3ObjectHierarchy_UnregisterClass
  169.     
  170.     Identical to Q3ObjectClass_Unregister. Returns kQ3Failure if the 
  171.     objectClass still has objects around; the class remains registered.
  172.  */
  173. TQ3Status Q3ObjectHierarchy_UnregisterClass(
  174.     TQ3ObjectClass            objectClass);
  175.  
  176. /*
  177.     Q3ObjectHierarchy_GetMethod
  178.     
  179.     For use in TQ3ObjectClassRegisterMethod call
  180. */
  181. TQ3FunctionPointer Q3ObjectHierarchy_GetMethod(
  182.     TQ3ObjectClass            objectClass,
  183.     TQ3MethodType            methodType);
  184.  
  185. /*
  186.     Q3ObjectHierarchy_NewObject
  187.     
  188.     To create a new object. Parameters is passed into the 
  189.     TQ3ObjectNewMethod as the "parameters" parameter.
  190. */
  191. TQ3Object Q3ObjectHierarchy_NewObject(
  192.     TQ3ObjectClass            objectClass,
  193.     void                    *parameters);
  194.  
  195. /*
  196.     Q3ObjectClass_GetLeafType
  197.     
  198.     Return the leaf type of a class.
  199. */
  200. TQ3ObjectType Q3ObjectClass_GetLeafType(
  201.     TQ3ObjectClass            objectClass);
  202.  
  203. /*
  204.     Q3ObjectClass_GetSubClassType
  205.     Q3Object_GetSubClassType
  206.     
  207.     Return the subclass type of "targetObject" or "targetObjectClass"
  208.     
  209.     Used for "GetType" calls for a particular class. e.g.
  210.     
  211.     Q3Geometry_GetType would be implemented:
  212.     
  213.         TQ3ObjectType Q3Geometry_GetType(
  214.             TQ3GeometryObject            object)
  215.         {
  216.             return Q3ObjectHierarchy_GetObjectType(gGeometryClass, object);
  217.         }
  218.  
  219.     where gGeometryClass is the geometry object class, and "object" is
  220.     a subclass of the geometry class. The type returned is the "direct"
  221.     subclass type of the geometry.
  222. */
  223. TQ3ObjectType Q3ObjectClass_GetSubClassType(
  224.     TQ3ObjectClass            objectClass,
  225.     TQ3ObjectClass            targetObjectClass);
  226.  
  227. TQ3ObjectType Q3Object_GetSubClassType(
  228.     TQ3ObjectClass            objectClass,
  229.     TQ3Object                targetObject);
  230.  
  231. TQ3ObjectClass Q3ObjectHierarchy_FindClassByType(
  232.     TQ3ObjectType            type);
  233.  
  234. /*
  235.     Q3Object_GetClassPrivate
  236.     Q3ObjectClass_GetClassPrivate
  237.     
  238.     Return pointers to private class data, a block of methodsSize bytes, from
  239.     the Q3ObjectHierarchy_RegisterClass call.
  240.     
  241.     If methodsSize was zero, NULL is always returned.
  242. */
  243. void *Q3Object_GetClassPrivate(
  244.     TQ3ObjectClass            objectClass,
  245.     TQ3Object                targetObject);
  246.  
  247. void *Q3ObjectClass_GetClassPrivate(
  248.     TQ3ObjectClass            objectClass,
  249.     TQ3ObjectClass            targetObjectClass);
  250.  
  251. /*
  252.     Q3Object_GetPrivate
  253.     
  254.     Return a pointer to private instance data, a block of instanceSize bytes, 
  255.     from the Q3ObjectHierarchy_RegisterClass call.
  256.     
  257.     If instanceSize was zero, NULL is always returned.
  258. */
  259. void *Q3Object_GetPrivate(
  260.     TQ3ObjectClass            objectClass,
  261.     TQ3Object                targetObject);
  262.  
  263. /******************************************************************************
  264.  **                                                                             **
  265.  **                                Posting Errors                                  **
  266.  **                                                                             **
  267.  **            You may only call these functions from within an extension         **
  268.  **                                                                             **
  269.  *****************************************************************************/
  270.  
  271. /*
  272.     Q3Error_Post
  273.     
  274.     Post a QuickDraw 3D Error.
  275. */
  276. QD3D_EXPORT void Q3Error_Post(
  277.     TQ3Error                error);
  278.  
  279. #if defined(OS_MACINTOSH) && OS_MACINTOSH
  280.  
  281. /*
  282.     Q3MacintoshError_Post
  283.     
  284.     Post the QuickDraw 3D Error, kQ3ErrorMacintoshError, and the Macintosh
  285.     OSErr macOSErr. (Retrieved with Q3MacintoshError_Get)
  286. */
  287. QD3D_EXPORT void Q3MacintoshError_Post(
  288.     OSErr                    macOSErr);
  289.  
  290. #endif  /*  OS_MACINTOSH  */
  291.  
  292. /******************************************************************************
  293.  **                                                                             **
  294.  **                                Public API                                      **
  295.  **                                                                             **
  296.  *****************************************************************************/
  297.  
  298. #if defined(ESCHER_VER_15) && ESCHER_VER_15
  299.  
  300. QD3D_EXPORT TQ3Extension Q3Extension_GetFirst(
  301.     void);
  302.  
  303. QD3D_EXPORT TQ3Extension Q3Extension_GetNext(
  304.     TQ3Extension            extension);
  305.  
  306. QD3D_EXPORT TQ3Status Q3Extension_Load(
  307.     TQ3Extension            extension);
  308.     
  309. QD3D_EXPORT TQ3ObjectType Q3Extension_GetParentType(
  310.     TQ3Extension            extension);
  311.  
  312. QD3D_EXPORT TQ3ObjectType Q3Extension_GetLeafType(
  313.     TQ3Extension            extension);
  314.  
  315. QD3D_EXPORT TQ3StringObject Q3Extension_GetName(
  316.     TQ3Extension            extension);
  317.  
  318. #endif /* ESCHER_VER_15 */
  319.  
  320. #ifdef __cplusplus
  321. }
  322. #endif  /* __cplusplus  */
  323.  
  324. #if defined(__MWERKS__)
  325.     #pragma enumsalwaysint reset
  326. #elif defined(__xlc) || defined(__xlC) || defined(__xlC__) || defined(__XLC121__)
  327.     #pragma options enum=reset
  328. #endif
  329.  
  330. #endif  /* QD3DExtension_h  */
  331.